package leetcode;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;

//给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。
//给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母

public class problems_020 {

    public static void main(String[] arge){
        System.out.println(new Solution().isValid("1"));
    }
    static class Solution {
        public Map<Character, Character> map = new HashMap<Character, Character>(){{
            put('(',')');
            put('{','}');
            put('[',']');
        }};
        public boolean isValid(String s) {
            if (null == s) return false;
            Stack<Character> stack = new Stack<>();  // 栈
            for (int i = 0; i < s.length(); i++) {
                if(map.containsKey(s.charAt(i))){
                    stack.push(map.get(s.charAt(i)));
                }else {
                    if(stack.empty()){
                        return false;
                    }
                    char value = stack.pop();
                    if(value != s.charAt(i)){
                        return false;
                    }
                }
            }
            if(!stack.empty()){
                return false;
            }
            return true;
        }
    }
}
